home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / FALCON / BIGDISKS / BIG_10 / VIRENDET.3-1 / WPROTECT / WPROTECT.S < prev    next >
Text File  |  1998-03-14  |  26KB  |  818 lines

  1. *******************************************************************************
  2. *
  3. *         >>  WPROTECT.S <<                  V1.01      17.01.1992
  4. *
  5. *         Shareware © by
  6. *         Christoph Conrad
  7. *         Adalbertsteinweg 113
  8. *         5100 Aachen
  9. *
  10. *         E-Mail (lieber die als P*ST) direkt über
  11. *         MAUS: Christoph Conrad @ AC3
  12. *         ...und die Gateways
  13. *         FIDO: Christoph Conrad % Maus AC3 2:242/2.6
  14. *       USEnet: Christoph_Conrad@ac3.maus.de
  15. *     Zerberus: Christoph_Conrad%ac3@zermaus.zer
  16. *          BTX: Seite *35008024#, im Formular ausfüllen
  17. *               Christoph_Conrad@AC3.MAUS.DE.UUCP
  18. *               (kostet 90 Pfennig)
  19. *
  20. * Dieses Programm liegt auch dem VIRENDETEKTOR bei, _DEM_ Virensuchprogramm
  21. * auf dem ATARI ST/TT von Volker Soehnitz @ AC. Keiner bietet mehr!
  22. * Lassen Sie sich registrieren und geniessen Schutz vor allen aktuellen
  23. * Viren durch den Updateservice.
  24. *
  25. * Wenn Sie den Sharewarebeitrag für den VIRENDETEKTOR bezahlt haben,
  26. * müssen Sie KEINEN Sharewarebeitrag für WProtect zahlen! Falls Sie
  27. * keinen Sharewarebeitrag für den VIRENDETEKTOR zahlen wollen/können,
  28. * WProtect aber trotzdem regelmässig nutzen, sind Sie verpflichtet,
  29. * den Sharewarebeitrag in Höhe von 10,- DM zu bezahlen.
  30. * Details siehe WPROTECT.TXT
  31. *
  32. * WProtect kann allerdings auch so weiterkopiert werden, allerdings nur
  33. * _MIT_
  34. * WPROTECT.S
  35. * WPRORSC.S
  36. * WPROTECT.PRG (Unter GEM/Autoordner, durch Umbenennen auch Accessory)
  37. * WPROTECT.RSC
  38. * WPROTECT.RSD (Kuma NRCS)
  39. * WPROTECT.TXT
  40. *
  41. * Liebe Leute, diese Source entstand vor grauer Vorzeit. Also verzeiht mir
  42. * die nicht ganz so übersichtliche Programmierung (in der nächsten Version
  43. * komplett überarbeitet).
  44. *
  45. * Im folgenden bedeute
  46. *
  47. * + Neues Feature
  48. * - Beseitigter Bug / Unschönheit / Inkompatibilität
  49. *
  50. * History:
  51. * 0.97/f: - Sicherungslaufwerk jetzt aus _bootdev ($446)
  52. *         - _drvbits / ProtDrive / ProtDouble wird jetzt als 32 Bit behandelt
  53. *           (Laufwerke A-Z)
  54. *         - Im Accessory werden jetzt bei jeder Aktivierung die aktuellen
  55. *           Schutzwerte aus dem CurrentVec übernommen (sonst würde eine
  56. *           zwischenzeitliche Änderung über einen Programmaufruf ignoriert)
  57. *         + Nachfrage bei Sichern auf X:\AUTO\WPROTECT.PRG (X == Bootlaufwerk),
  58. *           falls Bootlaufwerk als geschützt gilt.
  59. *         + Accessory erkennt nachträglich installierten Schutz.
  60. *         + Unterstützung des VA-Protokolls (VA_START)
  61. *
  62. * Die magische Grenze...
  63. *
  64. * 1.00:   (internal release, not distributed)
  65. *         + GEM-Dialogbox
  66. *           Zum Umwandeln der Resource in Assemblerquellcode verwende
  67. *           ich RSC_TO_S.PRG von
  68. *           »Bernd Eckstein« @ AC (Shareware, 10,- die sich lohnen!)
  69. *           Version >= 1.18!! ( Hallo Bernd =:^} )
  70. *         + Erkennung des residenten Prg über Cookies anstatt XBRA
  71. *           COOKIE-Library von
  72. *           »Arnd Beissner« @ MS (PD, sehr einfach in der Anwendung)
  73. *           Version >= 1.03!!
  74. *           In Version 1.03 sind noch eine Menge bra, die sich in bra.s
  75. *           umwandeln lassen.
  76. *         + Anpassung des Resourcefiles an Letemfly von
  77. *           »Oliver Scheel« @ K (PD, 'man fliegt nicht mehr ohne...')
  78. *           Version >= 1.14!!
  79. *           Die Laufwerksbuttons 'A'-'Z' sind über ALT-A - ALT-Z erreichbar.
  80. *           UNDO entspricht dem Abbruchbutton, HELP dem Sichernbutton.
  81. *           In V1.14 verhält sich die Letemfly-form_alert-Routine bezüglich
  82. *           innerhalb der Box zentrierter Texte anders als die Original-
  83. *           VDI-Routine. Dies ist ein rein kosmetisches Problem.
  84. *
  85. * Alle über MAUS E-Mail addressierbaren Leute können auch über die
  86. * Gateways erreicht werden, indem mein Name und mein Mausknoten (@AC3)
  87. * gegen ihren Namen/MAUS-Knoten ausgetauscht wird, also etwa
  88. *         FIDO: Bernd Eckstein % Maus AC @ 2:242/2.6
  89. *
  90. * 1.01:   + Für das Sichern der Konfiguration wird das Bootlaufwerk
  91. *           DGetDrv (GEMDOS 25) im Autoordner-Programm ermittelt.
  92. *         + Versionsnummer abfragbar (siehe Source Label 'Version')
  93. *         + LinksShift+[Button]Nochmal in der Critical-Error-Handler-Box
  94. *           hebt den Schreibschutz für dieses Laufwerk auf!
  95. *
  96. * Future Releases (*+ bei genügender Zahlungsmoral)
  97. *         + MetaDOS-Laufwerke werden definitiv unterstützt
  98. *        *+ CPX-Modul (wenn es dazu ein vernünftiges Assembler-Toolkit gibt)
  99. *        *+ Kommandozeile a la
  100. *           WPROTECT +ABC-EFG schützt A/B/C, entschützt E/F/G
  101. *           und lässt den Schutzstatus aller anderen Laufwerke unangetastet
  102. *           WPROTECT ++-EF schütze alle ausser E und F
  103. *           WPROTECT --+EF entschütze alle, schütze E und F
  104. *        *+ Buttons [ Schütze alle ] / [ Entschütze alle ]
  105. *        +- WPROTECT.INF-Datei anstatt Speichern der Parameter im
  106. *           Programm selbst.
  107. *         + aufgeräumterer Source
  108. *         + bessere Dokumentation
  109. *
  110. * mfg chris.
  111. *
  112. * Assemblieren mit MadMac V 0.13 (uralt, aber schnell & zuverlässig)
  113. * Kommandozeile: -p wprotect
  114. *
  115. * WPRORSC.S (das umgewandelte Resourcefile) + COOKIE.S
  116. * müssen sich in demselben Verzeichnis wie WPROTECT.S befinden!
  117. *
  118. * Noch einige Bemerkungen zur RESOURCE. Die Objekte müssen mit 'Erst X, dann Y'
  119. * sortiert sein, damit die Laufwerksknöpfe aufsteigende Objektindize haben.
  120. *
  121. * In der umgewandelten Resource bezeichnet
  122. * OBJCs000    Anzahl Objekte in Baum 1
  123. * Objc000000  Label des ersten Objekt in Baum 1
  124. * Falls Ihr Resourcekonverter andere Bezeichnungen wählt, müssen Sie
  125. * diese anpassen.
  126. *
  127. *******************************************************************************
  128.  
  129. WRITE_PROTECT   EQU     -13         ; Bios-Fehlermeldung
  130. _bootdev        EQU     $446
  131. hdv_rw          EQU     $476        ; Harddisk Schreiben-Lesen
  132. _drvbits        EQU     $4C2
  133.  
  134. NrOfDrives      EQU     26
  135.  
  136.             .macro AES  func
  137.             lea         \func(pc),a0
  138.             bsr         CallAES
  139.             .endm
  140.  
  141.             .macro SupExec  func
  142.             lea         \func(pc),a0
  143.             bsr         SupExec
  144.             .endm
  145.  
  146.             .macro ZeigeAlert  func
  147.             move.l  #\func,addrin
  148.             move.w  #1,intin           ; Defaultbutton 1
  149.             AES     FormAlert
  150.             .endm
  151.  
  152.            .macro GEMDOS trpno, clean
  153.            .if \trpno != 0
  154.             move.w  #\trpno,-(sp)
  155.            .else
  156.             clr.w   -(sp)
  157.            .endif
  158.             trap    #1
  159.            .if \# = 2
  160.               .if  \clean <= 6         ; -2 wegen trpno
  161.                addq.w  #2+\clean,sp    ; .w ok, da Extension automatisch!
  162.               .else
  163.                lea     2+\clean(sp),sp
  164.               .endif
  165.            .endif
  166.            .endm
  167.  
  168.            .TEXT
  169. Anfang:     bra     Install
  170.  
  171. *---------------------------
  172. *---------------------------
  173.  
  174. Version:    DC.L    '1.01'      ; Position: -18(NewHdvRW)
  175.  
  176. AutoBootDrv:DC.W    0           ; aktuelles Laufwerk bei Autoordner-Programm
  177. * Bitstring zu schützender Laufwerke Bit 0 == A:, Bit 1 == B: etc.
  178. ProtDrive:  DC.L    0           ; Position: -16(NewHdvRW)
  179.  
  180. *
  181. * XBRA-Struktur
  182. *
  183. XBRA:       DC.B    "XBRA"      ; Position: -12(NewHdvRW)
  184. Ident:      DC.B    "WPRO"      ; Position: -8(NewHdvRW)
  185. ; alter hdv_rw-Vektor
  186. OldHdvRW:   DC.L    0           ; Position: -4(NewHdvRW)
  187.  
  188. * Neuer hdv_rw-Vektor
  189. NewHdvRW:
  190. ProtDriveOffs   EQU   ProtDrive   - *
  191. AutoBootDrvOffs EQU   AutoBootDrv - *
  192.  
  193.             movem.l d1-a6,RegSave
  194.  
  195.             btst.b  #0,5(sp)    ; Read-Write-Flag
  196.             beq.s   gotoOld     ; es wird nur gelesen
  197.  
  198.             move.w  14(sp),d3   ; Laufwerk 0=A:, 1=B: etc.
  199.             move.l  _drvbits.w,d4
  200.             btst.l  d3,d4       ; gibt's das Laufwerk überhaupt ?
  201.             beq.s   gotoOld     ; nein
  202.             move.l  ProtDrive(pc),d4
  203.             btst.l  d3,d4       ; soll Laufwerk geschützt werden ?
  204.             beq.s   gotoOld     ; nein
  205.     .loop:  moveq   #WRITE_PROTECT,d0
  206.           ; D3-D7 / A3-A6 werden vom Critical-Error-Handler gerettet
  207.             bsr.s   CallCritErr ; critical-error-handler aufrufen
  208.             cmp.l   #$10000,d0  ; Retry ?
  209.             bne.s   .wpro
  210.  
  211.           ; Bei Linksshift+Button[Nochmal] wird der Laufwerksschutz
  212.           ; für das betreffende Laufwerk aufgehoben
  213.             lea     $E1B.w,a1          ; Vorannahme TOS 1.00
  214.             move.l  $4F2.w,a0          ; _sysbase
  215.           ; TOS >= 1.02?
  216.             cmp.w   #$102,2(a0)
  217.             bcs.s   .tos10
  218.             move.l  $24(a0),a1         ; *pkbshift
  219.           ; LinksShift gedrückt?
  220.     .tos10: cmp.b   #2,(a1)
  221.             bne.s   .loop
  222.           ; Laufwerksschutz aufheben
  223.             move.w  14(sp),d3   ; Laufwerk 0=A:, 1=B: etc.
  224.             move.l  ProtDrive(pc),d4
  225.             bclr    d3,d4
  226.             move.l  d4,ProtDrive
  227.             bra.s   gotoOld
  228.  
  229.      .wpro: movem.l RegSave(pc),d1-a6
  230.             moveq   #WRITE_PROTECT,d0
  231.             rts
  232. gotoOld:    movem.l RegSave(pc),d1-a6
  233.             move.l  OldHdvRW(pc),-(sp)
  234.             rts
  235.  
  236. CallCritErr:move.w  d3,-(sp)    ; Laufwerk
  237.             move.w  d0,-(sp)    ; Fehlercode
  238.             moveq   #-1,d0      ; Kompatibilität zum Bios
  239.             move.l  $404.w,a0   ; etv_critic
  240.             jsr     (a0)
  241.             addq.w  #4,sp
  242.             rts
  243.  
  244. RegSave:    .DCB.L   14,0 ; D1-D7/a0-a6
  245.  
  246. AutoResident    EQU     *
  247. *----------------------------
  248.  
  249. *
  250. * Resource einbinden
  251. *
  252.             .include "WPRORSC.S"
  253.  
  254. AESPB:      DC.L    control, global, intin, intout, addrin, addrout
  255.  
  256. NotResident:DC.B    "[1][WProtect 1.01:|Bleibe nicht resident.][Ok]",0
  257.             .even
  258.  
  259. AlertNotInstalled:
  260.             DC.B    "[1][WProtect 1.01:|Bitte installieren!][Ok]",0
  261.             .even
  262.  
  263. Widmung:    DC.B    "[0][~~~~~~~~~~~~~~~  |  Widmung  an|    Barbara|"
  264.             DC.B    "~~~~~~~~~~~~~~~  ][ Ok ]",0
  265.             .even
  266.  
  267. NoCookie:   DC.B    "[1][WProtect 1.01:|Kann keinen Cookie anlegen.][Ok]",0
  268.             .even
  269.  
  270. AlertBootProt:
  271.             DC.B    "[2][WProtect 1.01:|Laufwerk "
  272. AlertBootDrv:
  273.             DC.B    0," ist geschützt.|Trotzdem sichern?]"
  274.             DC.B    "[Ok|Abbruch]",0
  275.             .even
  276.  
  277. Menu_entry: DC.B    "  ",3," WProtect 1.01  ",0
  278.             .even
  279.  
  280. FileError:  DC.B    "[1][ Dateifehler beim Speichern | auf "
  281. FileErrDrv: DC.B    "X:\\AUTO\\WPROTECT.PRG !][ Ok ]",0
  282.             .even
  283.  
  284. FName:      DC.B    "X:\\AUTO\\WPROTECT.PRG",0   ; 1. Byte == Laufwerk
  285.             .even
  286.  
  287. * Worte für's control-Feld
  288. * contrl[0..4] = opcode / #intin / #intout / #addrin / #addrout
  289. * O-Ton Profibuch 10te Auflage:
  290. * "Darüber, welche Werte vor einem AES-Aufruf gesetzt werden müssen, gibt es
  291. * keine klaren Informationen. Nötig ist es auf jeden Fall für contrl[0],
  292. * contrl[1] und contrl[3]. Wenig sinnvoll erscheint es für contrl[2] und
  293. * contrl[4] - schliesslich wissen ja die AES-Funktionen selbst, wie viele
  294. * Werte sie in den Ausgabefeldern zurückliefern.
  295. * Die mit dem Original-Entwicklungspaket mitgelieferten Bindings [...] setzen
  296. * allerdings alle Werte des Arrays."
  297. * ...und tatsächlich: Unterlasse ich das Vorbesetzen von contrl[2] und
  298. * contrl[4] funktioniert der Aufruf über Anklicken der Menüleiste nicht
  299. * mehr.
  300. ApplicationInit:
  301.             DC.W    10,0,1,0,0
  302. ApplExit:   DC.W    19,0,1,0,0
  303. EvntMesag:  DC.W    23,0,1,1,0
  304. MenuRegister:DC.W  35,1,1,1,0
  305.  
  306. FormAlert:  DC.W    52,1,1,1,0
  307. FormDo:     DC.W    50,1,1,1,0
  308. FormDial:   DC.W    51,9,1,0,0
  309. FormCenter: DC.W    54,0,5,1,0
  310.  
  311. GrafMouse:  DC.W    78,1,1,1,0
  312. WindUpdate: DC.W    107,1,1,0,0
  313.  
  314. RSRCObFix:  DC.W    114,1,1,1,0
  315.  
  316. OBJC_Change:DC.W    47,8,1,1,0
  317. OBJC_Draw:  DC.W    42,6,1,1,0
  318.  
  319.            .BSS
  320. control:    DS.W    12
  321. global:     DS.W    15
  322. intin:      DS.W    128
  323. intout:     DS.W    128
  324. addrin:     DS.W    128
  325. addrout:    DS.W    128
  326.  
  327. CurrentVec: DS.L    1   ; NewHdvRW-Vektor
  328. Installed:  DS.B    1   ; 0 : Installiert !
  329. Accessory:  DS.B    1   ; Falls 0 -> Accessory
  330. * beim Abspeichern von ProtDrive darf das Laufwerk, auf dem
  331. * gespeichert wird, nicht geschützt sein. ProtDouble dient als
  332. * Buffer, während in ProtDrive das entsprechende Bit gelöscht wird
  333. ProtDouble: DS.L    1
  334. BootDrv:    DS.W    1
  335. ActDrive:   DS.B    1   ; Aktuell zu bearbeitendes Laufwerk
  336. DrvBits:    DS.L    1   ; Kopie von _drvbits ($4C2)
  337. Keep:       DS.L    1
  338.  
  339. * Per FormCenter ermittelte zentrierte Koordinaten der Dialogbox
  340. xClip:      DS.W    1
  341. yClip:      DS.W    1
  342. wClip:      DS.W    1
  343. hClip:      DS.W    1
  344.  
  345. MsgBuf:     DS.B    16  ; Nachrichtenbuffer AES
  346.  
  347.             DS.B    $190    ; 400 Byte Stack reichen dicke
  348. Stack       EQU     *
  349.  
  350.  
  351.            .TEXT
  352. *-------------------------
  353. ObjcChange:
  354. * Vorzubesetzen sind
  355. * intin     Objektnummer
  356. * intin+12  newstate
  357. * intin+14  (0) 1 = (nicht) neuzeichnen
  358. * Parameterfelder für OBJC_Change setzen
  359.             clr.w   intin+2         ; reserved
  360.           ; Clipping setzen (quasi abschalten)
  361.             clr.l   intin+4
  362.             move.l  #$7FFF7FFF,intin+8
  363.  
  364.             move.l  #Objc000000,addrin ; Objektbaumadresse
  365.             AES     OBJC_Change
  366.             rts
  367.  
  368. ObFixCenter:
  369. * Anpassung Koordinaten Zeichen- in Pixeldarstellung
  370.             move.l  #Objc000000,addrin
  371.             move.w  #OBJCs000-1,d3
  372.  
  373.   .convert: move.w  d3,intin
  374.             AES     RSRCObFix
  375.             dbra    d3,.convert
  376.             rts
  377.  
  378. DialogInit: move.l  #Objc000000,addrin
  379.             AES     FormCenter
  380.             move.l  intout+2,xClip
  381.             move.l  intout+6,wClip
  382.  
  383.             SupExec GetDrvBits
  384.             move.l  DrvBits,d4
  385.             move.l  ProtDrive(pc),d5
  386.             move.w  #NrOfDrives-1,d3      ; 26 Laufwerke testen
  387.  
  388.             clr.w   intin+14    ; nicht neuzeichnen
  389.  
  390.      .loop: btst.l  d3,d4       ; gibt's das Laufwerk überhaupt ?
  391.             bne.s   .protect    ; ja
  392.  
  393.             move.w  #8,intin+12     ; DISABLED
  394.  
  395.             bra.s   .change
  396.  
  397.   .protect: btst.l  d3,d5           ; soll Laufwerk geschützt werden ?
  398.             bne.s   .prot           ; ja
  399.             clr.w   intin+12        ; NOT SELECTED
  400.             bra.s   .change
  401.  
  402.      .prot: move.w  #1,intin+12     ; SELECTED
  403.  
  404.    .change: move.w  d3,d6
  405.             addq.w  #DRIVEA,d6
  406.             move.w  d6,intin        ; Objektnummer
  407.             bsr     ObjcChange
  408.     .loop1: dbra    d3,.loop
  409.  
  410.             move.w  #1,intin        ; BEG_UPDATE
  411.             AES     WindUpdate
  412.  
  413. DrawDialog: clr.w   intin           ; Mauszeiger als Pfeil
  414.             AES     GrafMouse
  415.  
  416.             clr.w   intin           ; FMD_START
  417.             clr.l   intin+2
  418.             clr.l   intin+6
  419.             move.l  xClip,intin+10
  420.             move.l  wClip,intin+14
  421.             AES     FormDial
  422.  
  423.             clr.w   intin           ; Startobjekt 0
  424.             move.w  #8,intin+2      ; Alle Objektebenen zeichnen
  425.             move.l  xClip,intin+4
  426.             move.l  wClip,intin+8
  427.             AES     OBJC_Draw
  428.  
  429. Dialog:     clr.w   intin
  430.             move.l  #Objc000000,addrin ; Objektbaumadresse
  431.             AES     FormDo
  432.             move.w  intout,d0
  433.  
  434.             cmp.w   #WIDMUNG,d0
  435.             bne.s   .weiter
  436.             ZeigeAlert Widmung
  437.             move.w  #WIDMUNG,intin
  438.    .change: clr.w   intin+12
  439.             move.w  #1,intin+14
  440.             bsr     ObjcChange
  441.             bra.s   Dialog
  442.  
  443.    .weiter: cmp.w   #EXIT,d0
  444.             beq.s   ExitButton
  445.  
  446.             cmp.w   #SAVE,d0
  447.             bne.s   IsOk?
  448.             bsr     SaveConfig
  449.             move.w  #SAVE,intin
  450.             bra.s   .change
  451.  
  452.      IsOk?: cmp.w   #OK,d0
  453.             beq.s   OkButton
  454.  
  455.             bra     Dialog
  456. *------------------------
  457. NewProtDrv: lea     Objc000000(pc),a0   ; Objektbaumadresse
  458.             move.w  #DRIVEA+NrOfDrives-1,d0
  459.             mulu    #24,d0
  460.             adda.l  d0,a0
  461.  
  462.             move.w  #NrOfDrives-1,d0
  463.             clr.l   d1                 ; Default: alle deselektiert
  464.  
  465. * Laufwerke durchgehen
  466.      .test: btst.b  #0,11(a0)          ; Selected?
  467.             beq.s   .weiter            ; nein
  468.             bset.l  d0,d1
  469.    .weiter: suba.l  #24,a0             ; nächstes Objekt
  470.             dbra    d0,.test
  471.             rts
  472.  
  473. OkButton:   move.w  d0,intin
  474.             clr.l   intin+12
  475.             bsr     ObjcChange
  476.  
  477.             bsr     NewProtDrv
  478.  
  479.             move.l  CurrentVec,a0    ; die neuen Schutzwerte übernehmen
  480.             move.l  d1,ProtDriveOffs(a0)
  481.  
  482. ExitButton: move.w  d0,intin
  483.             clr.l   intin+12
  484.             bsr     ObjcChange
  485.  
  486.             move.w  #3,intin        ; FMD_FINISH
  487.             clr.l   intin+2
  488.             clr.l   intin+6
  489.             move.l  xClip,intin+10
  490.             move.l  wClip,intin+14
  491.             AES     FormDial
  492.  
  493.             clr.w   intin           ; END_UPDATE
  494.             AES     WindUpdate
  495.  
  496.     IsAcc?: tst.b   Accessory
  497.             beq.s   WaitForAC_OPEN
  498.  
  499. * Wir sind ein Programm!
  500.             tst.b   Installed
  501.             bne.s   .Protected?     ; brancht falls NICHT installiert
  502.             bra.s   .terminate
  503.  
  504. * Sind überhaupt irgendwelche Laufwerke zum Schützen gekennzeichnet worden ?
  505. * Falls nicht, brauchen wir nicht resident zu verbleiben
  506. .Protected?:tst.l   ProtDrive
  507.             bne.s   .install
  508.  
  509.             ZeigeAlert NotResident
  510.  
  511.         ; ApplExit - Vom AES abmelden
  512. .terminate: AES     ApplExit
  513.  
  514.             GEMDOS  0               ; PTerm
  515.  
  516.   .install: SupExec InstallVecs
  517.             bne.s   .raus
  518.             ZeigeAlert NoCookie
  519.             bra.s   .terminate
  520.  
  521.         ; ApplExit - Vom AES abmelden
  522.      .raus: AES     ApplExit
  523.             clr.w   -(sp)
  524.             move.l  Keep,-(sp)
  525.             GEMDOS  49              ; PTermRes
  526.  
  527.  
  528. WaitForAC_OPEN:
  529.         ; EvntMesag - auf Mitteilung warten
  530.             move.l  #MsgBuf,addrin
  531.             AES     EvntMesag
  532.  
  533.             cmp.w   #40,MsgBuf            ; AC_OPEN
  534.             beq.s   .test
  535.             cmp.w   #$4711,MsgBuf         ; VA_START (Gemini)
  536.             bne.s   WaitForAC_OPEN
  537.  
  538. * Falls Accessory ohne installiertes Autoordnerprogramm gestartet
  539. * immer mal wieder nachschauen ob nicht inzwischen über WPROTECT.PRG
  540. * (nachträglich gestartet) ein residentes WProtect drin ist.
  541.      .test: bsr     IsInstalled?
  542.  
  543.             tst.b   Installed
  544.             bne.s   AccNotInstEntry   ; Nicht installiert
  545.  
  546.             move.l  CurrentVec,a0
  547.             move.l  ProtDriveOffs(a0),ProtDrive
  548.  
  549.             bra     DialogInit
  550.  
  551. AccNotInstEntry:
  552.           ; Nicht installiert
  553.             ZeigeAlert AlertNotInstalled
  554.  
  555.             bra     WaitForAC_OPEN
  556.  
  557. *-------------------------
  558. CallAES:    movem.l d0-a6,-(sp)
  559.             move.w  (a0)+,control
  560.             move.l  (a0)+,control+2
  561.             move.l  (a0),control+6
  562.             move.l  #AESPB,d1
  563.             move.w  #200,d0
  564.             trap    #2
  565.             movem.l (sp)+,d0-a6
  566.             rts
  567.  
  568. *-----------------------------------
  569. Install:
  570. * Offiziell dokumentiert:
  571. * Bei Accessories steht in a0 ein Zeiger auf die Basepage.
  572. * Sonst (alles ausser Accessories) ist a0 == 0.
  573.             cmpa.l  #0,a0       ; Basepageadresse in a0?
  574.             seq     Accessory   ; Nein ---> Wir sind ein Programm
  575.             bne.s   .weiter0
  576.             move.l  4(sp),a0    ; Basepageadresse
  577.  
  578.   .weiter0: move.l  #Stack,sp
  579.             tst.b   Accessory
  580.             beq.s   .cookie
  581.  
  582.             lea     Stack,a1
  583.             suba.l  a0,a1
  584.             move.l  a1,Keep     ; Anzahl evt. resident zu haltender Bytes
  585.  
  586.             move.l  Keep,-(sp)
  587.             pea     (a0)        ; ab Basepage
  588.             clr.w   -(sp)       ; Dummy
  589.             GEMDOS  74,10       ; MShrink
  590.  
  591. ** Cookietest - sind wir schonmal installiert ?
  592.    .cookie: bsr     IsInstalled?
  593.  
  594. *-------------------------------------------------------------
  595. ** Beim AES anmelden
  596.             clr.w   global
  597.             AES     ApplicationInit
  598.             tst.w   global
  599.           ; global[0] (GEM-Version) wurde ja vorher auf 0 gesetzt
  600.           ; falls immer noch 0 kann das AES noch nicht initialisiert sein
  601.           ; d.h. wir sind im AUTO-Ordner
  602.             beq.s   AutoOrd
  603.  
  604.             tst.b   Accessory
  605.             bne.s   .weiter                ; bne -> Programm
  606.  
  607. ** MenuRegister - In die Menüzeile eintragen
  608.             move.w  intout,intin
  609.             move.l  #Menu_entry,addrin
  610.             AES     MenuRegister
  611.  
  612.    .weiter: bsr     ObFixCenter
  613.             tst.b   Accessory
  614.             bne     DialogInit               ; Programm
  615.             tst.b   Installed
  616.             beq     WaitForAC_OPEN
  617.             bra     AccNotInstEntry          ; Accessory
  618.  
  619. *--------------------------------------------------------
  620. ; Auto-Ordner-Programm
  621. AutoOrd:    tst.b   Installed
  622.             bne.s   .install
  623.             move.l  CurrentVec,a0
  624.             move.l  ProtDrive(pc),ProtDriveOffs(a0)
  625. .terminate: GEMDOS  0               ; PTerm
  626.  
  627.   .install: SupExec InstallVecs
  628.             bne.s   .weiter
  629.  
  630.             pea     AutoInf1(pc)
  631.             GEMDOS  9,4
  632.  
  633.             bra.s   .terminate
  634.  
  635.    .weiter: GEMDOS  25,0            ; DGetDrv, aktuelles Laufwerk
  636.             move.w  d0,AutoBootDrv
  637.  
  638.             pea     AutoInf0(pc)
  639.             GEMDOS  9,4
  640.  
  641. *----------
  642.             move.l  ProtDrive(pc),d7
  643.             beq.s   .raus
  644.  
  645.             pea     ProtectStr(pc)
  646.             GEMDOS  9,4
  647.  
  648.             clr.w   d5
  649.             lea     Drives+1(pc),a3
  650.      .test: btst    d5,d7
  651.             beq.s   .loopD
  652.             move    d5,d6
  653.             addi.b  #'A',d6
  654.             move.b  d6,(a3)
  655.  
  656.             pea     Drives(pc)
  657.             GEMDOS  9,4
  658.  
  659.     .loopD: addq.w  #1,d5
  660.             cmp.b   #NrOfDrives,d5
  661.             blt.s   .test
  662. *----------
  663.  
  664.      .raus: pea     CRLFCRLF(pc)
  665.             GEMDOS  9,4
  666.  
  667.             clr.w   -(sp)
  668.             pea     AutoResident-Anfang+$100
  669.             GEMDOS  49
  670.  
  671. Drives:     DC.B    " A",0
  672. ProtectStr: DC.B    " Schütze: ",0
  673. AutoInf0:   DC.B    13,10,"*** WProtect 1.01 RESIDENT.",0
  674. CRLFCRLF:   DC.B    13,10,13,10,0
  675. AutoInf1:   DC.B    "*** WProtect 1.01: kein COOKIE anlegbar.",13,10
  676.             DC.B    "***                NICHT RESIDENT!",13,10,0
  677.             .even
  678.  
  679. *----------------------
  680.  
  681. * Bitstring der angemeldeten Laufwerke holen
  682. GetDrvBits: move.l  _drvbits.w,DrvBits       ; angemeldete Laufwerke
  683.             rts
  684.  
  685. *-------------------
  686.  
  687. **** Per XBios(38) im Supervisormode ausgeführte Funktionen
  688. SupExec:    pea     (a0)
  689.             move.w  #38,-(sp)
  690.             trap    #14
  691.             addq.w  #6,sp
  692.             rts
  693.  
  694. *----------------------------------------------------
  695. *  IN: -
  696. * OUT: d0.w == 0 Installation schlug fehl
  697. InstallVecs:move.l  #'WPRO',d0
  698.             move.l  #NewHdvRW,d1
  699.             bsr     CK_WriteJar
  700.             tst.w   d0
  701.             beq.s   .return
  702.  
  703.             move.l  hdv_rw.w,OldHdvRW
  704.             move.l  #NewHdvRW,hdv_rw.w
  705.    .return: rts
  706.  
  707. Get_bootdev:tst.b   Installed
  708.             beq.s   .weiter
  709.             move.w  _bootdev.w,BootDrv
  710.             rts
  711.    .weiter: move.l  CurrentVec,a0
  712.             move.w  AutoBootDrvOffs(a0),BootDrv
  713.             rts
  714.  
  715. *-------------------
  716. SaveConfig:
  717. * Sichern der Konfiguration
  718.             bsr     NewProtDrv
  719.             move.l  d1,d4
  720.             move.l  d1,ProtDrive
  721.  
  722.         ; ProtDrive zum Sichern retten
  723.             move.l  ProtDrive(pc),ProtDouble
  724.  
  725.             SupExec Get_bootdev
  726.             move.w  BootDrv,d3
  727.  
  728.         ; das Laufwerk, auf dem gesichert wird, darf nicht als
  729.         ; geschützt gelten
  730.             bclr.l  d3,d4
  731.             beq.s   .noprot            ; war nicht geschützt
  732.  
  733. * Bei geschütztem Bootlaufwerk nochmal nachfragen, ob wirklich gesichert
  734. * werden soll! Dies auch bei NICHT installiertem WProtect.
  735.             move.b  d3,AlertBootDrv
  736.             addi.b  #'A',AlertBootDrv
  737.             ZeigeAlert AlertBootProt
  738.  
  739.             cmpi.w  #2,intout
  740.             beq     SaveRet
  741.  
  742.    .noprot: move.l  CurrentVec,a0
  743.             move.l  d4,ProtDriveOffs(a0)
  744.             addi.b  #'A',d3
  745.  
  746.             lea     FName(pc),a0   ; 'X:\\AUTO\\WPROTECT.PRG'
  747.             move.b  d3,(a0)
  748.             move.b  d3,FileErrDrv
  749.  
  750.           ; FOpen
  751.             move.w  #1,-(sp)
  752.             pea     (a0)
  753.             GEMDOS  61,6
  754.             tst.w   d0
  755.             bmi.s   FileErr
  756.  
  757.           ; D3 wird bei GemDos-Aufrufen automatisch gerettet
  758.             move.w  d0,d3
  759.  
  760.           ; FSeek
  761.             clr.w   -(sp)
  762.             move.w  d3,-(sp)
  763.             move.l  #28+ProtDrive-Anfang,-(sp)
  764.             GEMDOS  66,8
  765.             tst.w   d0
  766.             bmi.s   FileErr
  767.  
  768.           ; FWrite
  769.             pea     ProtDouble
  770.             move.l  #4,-(sp)
  771.             move.w  d3,-(sp)
  772.             GEMDOS  64,10
  773.             tst.w   d0
  774.             bmi.s   FileErr
  775.  
  776.     FClose: move.w  d3,-(sp)
  777.             GEMDOS  62,2
  778.  
  779.             move.l  ProtDouble,ProtDrive
  780.             move.l  CurrentVec,a0
  781.             move.l  ProtDrive(pc),ProtDriveOffs(a0)
  782. SaveRet:    rts
  783.  
  784.  
  785. *--------------------------------------------------
  786. * Ein Dateifehler ist aufgetreten
  787.    FileErr: ZeigeAlert FileError
  788.             bra.s   FClose
  789.  
  790. *--------------------------------------------------
  791. CookieVal:  DC.L    0
  792. IsInstalled?:
  793.           ; Ab in den Supervisormode
  794.             pea     0
  795.             GEMDOS  32,4
  796.             move.l  d0,-(sp)
  797.  
  798.             move.l  #'WPRO',d0
  799.             lea     CookieVal(pc),a0
  800.             bsr     CK_ReadJar
  801.             tst.w   d0
  802.             seq     Installed
  803.             bne.s   .installed
  804.             move.l  #NewHdvRW,CurrentVec
  805.             bra.s   .weiter
  806.  
  807. .installed: move.l  CookieVal(pc),a0
  808.             move.l  a0,CurrentVec
  809.             move.l  ProtDriveOffs(a0),ProtDrive
  810.  
  811.           ; Zurück in den Usermode
  812.    .weiter: GEMDOS  32,4
  813.             rts
  814.  
  815.            .include "COOKIE.S"
  816.  
  817.            .END
  818.